package algorithm_demo.demo01;

/**
 * 前缀和
 * 给出一个数组Array = {1，2，3，4，5，6，7}
 * 生产前缀和数组Brray = {1，3，6，10，15，21，28}
 * （前缀和数组，即第N位的数组等于原数组中的第N位 + 前缀和数组中的N-1位
 *
 * @author Api
 * @date 2023/1/26 12:59
 */
public class Code10_PreSum {
    private final int[] preSum;//前缀和数组

    public static void main(String[] args) {

    }

    public Code10_PreSum(int[] arr) {
        int N = arr.length;
        preSum = new int[N];
        preSum[0] = arr[0];
        for (int i = 1; i < N; i++) {
            preSum[i] = preSum[i - 1] + arr[i];
        }
    }

    public int rangeSum(int L, int R) {
        return L == 0 ? preSum[R] : preSum[R] - preSum[L - 1];
    }


}
